package com.sv.ues.fia.tourismosv;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.HashMap;

import sv.ues.fia.tourismosv.R;
import sv.ues.fia.tourismosv.model.Comentario;
import sv.ues.fia.tourismosv.model.Lugar;
import sv.ues.fia.tourismosv.model.Puntuacion;
import android.content.ContentValues;
import android.content.Context;
import android.content.res.Resources;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.widget.ArrayAdapter;


public class CrearBaseTurismo {
	private final Context context; 
	private DatabaseHelper DBHelper; 
	private SQLiteDatabase db; 
	private static Resources res; 

	private static final String[] camposComentario = new String[] { "Id_Comentario","Id_Lugar","Critica" };
	private static final String[] camposFoto = new String[] { "Id_Foto","Id_Lugar","URL"};
	private static final String[] camposLugar = new String[] { "Id_Lugar","NombreLugar","Latitud","Longitud","Descripcion","Id_Tipo_Lugar","Direccion"};
	private static final String[] camposPuntuacion = new String[] {"Id_Puntuacion","Id_Lugar","Puntuacion"};
	private static final String[] camposTipoLugar = new String[] { "Id_Tipo_Lugar","NombreTipoLugar"};

	public CrearBaseTurismo(Context ctx) { // Constructor
		this.context = ctx;
		DBHelper = new DatabaseHelper(context);
		res = ctx.getResources();

	}
	
	private static class DatabaseHelper extends SQLiteOpenHelper {
		private static final String BASE_DATOS = "TurismoESA.s3db";//nombre de la base
		private static final int VERSION = 1;

		DatabaseHelper(Context context) {
			super(context, BASE_DATOS, null, VERSION);
		}

		@Override
		public void onCreate(SQLiteDatabase db) {
			try {
				// Leer Script de base de datos
				InputStream isScriptDb = res
						.openRawResource(R.raw.turismo_bd);

				// Creando BufferedReader object
				BufferedReader bReader = new BufferedReader(
						new InputStreamReader(isScriptDb,"UTF-8"));
				String line = null;

				// Leer archivo linea por linea e ir ejecuntando query
				while ((line = bReader.readLine()) != null) {
					db.execSQL(line.toString());

				}
			} catch (SQLException e) {
				e.printStackTrace();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			
			
			
		}

		@Override
		public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
		}
	}

	// ---abrir la base de datos---
	public void abrir() throws SQLException {
		db = DBHelper.getWritableDatabase(); // Abrir BD con permisos R/W
		return;
	}

	// ---cerrar la base de datos---
	public void cerrar() {
		DBHelper.close();
	}
	
	//Metodo para arraylist de comentarios
	
	public ArrayList<String> listacomentarios(String idlugar) {
		abrir();
		Cursor cursor = db.rawQuery("SELECT Critica FROM COMENTARIO WHERE Id_Lugar="+idlugar, null);
		ArrayList<String> listacomentarios = new ArrayList<String>();
		cursor.moveToFirst();
		while (!cursor.isAfterLast()) {
			listacomentarios.add(cursor.getString(0));
			cursor.moveToNext();
		}
		cursor.close();
		cerrar();
		return listacomentarios;
	}
		

	
	//Metodo para listar bancos
	public ArrayList<HashMap<String, String>> listarBancos() {

		abrir();
		Cursor cursor = db.rawQuery("SELECT ID_LUGAR,NOMBRELUGAR,DIRECCION FROM LUGAR WHERE ID_TIPO_LUGAR = 1", null);

		ArrayList<HashMap<String, String>> listaBanco = new ArrayList<HashMap<String, String>>();

		cursor.moveToFirst();
		while (!cursor.isAfterLast()) {
			HashMap<String, String> actual = new HashMap<String, String>();
			actual.put("id", cursor.getString(0));
			actual.put("nombre", cursor.getString(1));
			actual.put("direccion", cursor.getString(2));
			listaBanco.add(actual);

			cursor.moveToNext();
			}
		cursor.close();
		cerrar();
		return listaBanco;
		}
		
		////Metodo para listar destinos
		public ArrayList<HashMap<String, String>> listarDestinos() {

			abrir();
			Cursor cursor = db.rawQuery("SELECT ID_LUGAR,NOMBRELUGAR,DIRECCION FROM LUGAR WHERE ID_TIPO_LUGAR = 2", null);

			ArrayList<HashMap<String, String>> listaDestino = new ArrayList<HashMap<String, String>>();

			cursor.moveToFirst();
			while (!cursor.isAfterLast()) {
				HashMap<String, String> actual = new HashMap<String, String>();
				actual.put("id", cursor.getString(0));
				actual.put("nombre", cursor.getString(1));
				actual.put("direccion", cursor.getString(2));
				listaDestino.add(actual);

				cursor.moveToNext();

			}
		cursor.close();
		cerrar();
		return listaDestino;

	}
		
		
	////Metodo para listar Hospital
	public ArrayList<HashMap<String, String>> listarHospitales() {

		abrir();
		Cursor cursor = db.rawQuery("SELECT ID_LUGAR,NOMBRELUGAR,DIRECCION FROM LUGAR WHERE ID_TIPO_LUGAR = 3", null);

		ArrayList<HashMap<String, String>> listaHospital = new ArrayList<HashMap<String, String>>();

		cursor.moveToFirst();
		while (!cursor.isAfterLast()) {
			HashMap<String, String> actual = new HashMap<String, String>();
			actual.put("id", cursor.getString(0));
			actual.put("nombre", cursor.getString(1));
			actual.put("direccion", cursor.getString(2));
			listaHospital.add(actual);

			cursor.moveToNext();

		}
		cursor.close();
		cerrar();
		return listaHospital;

	}
	
				
	////Metodo para listar Hotel
	public ArrayList<HashMap<String, String>> listarHoteles() {

		abrir();
		Cursor cursor = db.rawQuery("SELECT ID_LUGAR,NOMBRELUGAR,DIRECCION FROM LUGAR WHERE ID_TIPO_LUGAR = 4", null);

		ArrayList<HashMap<String, String>> listaHotel = new ArrayList<HashMap<String, String>>();

		cursor.moveToFirst();
		while (!cursor.isAfterLast()) {
			HashMap<String, String> actual = new HashMap<String, String>();
			actual.put("id", cursor.getString(0));
			actual.put("nombre", cursor.getString(1));
			actual.put("direccion", cursor.getString(2));
			listaHotel.add(actual);

			cursor.moveToNext();

		}
		cursor.close();
		cerrar();
		return listaHotel;

	}
					
	////Metodo para listar Museo
	public ArrayList<HashMap<String, String>> listarMuseos() {

		abrir();
		Cursor cursor = db.rawQuery("SELECT ID_LUGAR,NOMBRELUGAR,DIRECCION FROM LUGAR WHERE ID_TIPO_LUGAR = 5", null);

		ArrayList<HashMap<String, String>> listaMuseo = new ArrayList<HashMap<String, String>>();

		cursor.moveToFirst();
		while (!cursor.isAfterLast()) {
			HashMap<String, String> actual = new HashMap<String, String>();
			actual.put("id", cursor.getString(0));
			actual.put("nombre", cursor.getString(1));
			actual.put("direccion", cursor.getString(2));
			listaMuseo.add(actual);

			cursor.moveToNext();

		}
		cursor.close();
		cerrar();
		return listaMuseo;

	}
					
	////Metodo para listar Playa
	public ArrayList<HashMap<String, String>> listarPlayas() {

		abrir();
		Cursor cursor = db.rawQuery("SELECT ID_LUGAR,NOMBRELUGAR,DIRECCION FROM LUGAR WHERE ID_TIPO_LUGAR = 6", null);

		ArrayList<HashMap<String, String>> listaPlaya = new ArrayList<HashMap<String, String>>();

		cursor.moveToFirst();
		while (!cursor.isAfterLast()) {
			HashMap<String, String> actual = new HashMap<String, String>();
			actual.put("id", cursor.getString(0));
			actual.put("nombre", cursor.getString(1));
			actual.put("direccion", cursor.getString(2));
			listaPlaya.add(actual);

			cursor.moveToNext();

		}
		cursor.close();
		cerrar();
		return listaPlaya;

	}
					
	////Metodo para listar Restaurantes Bares  y Cafe
	public ArrayList<HashMap<String, String>> listarRBCs() {

		abrir();
		Cursor cursor = db.rawQuery("SELECT ID_LUGAR,NOMBRELUGAR,DIRECCION FROM LUGAR WHERE ID_TIPO_LUGAR = 7", null);

		ArrayList<HashMap<String, String>> listaRBC = new ArrayList<HashMap<String, String>>();

		cursor.moveToFirst();
		while (!cursor.isAfterLast()) {
			HashMap<String, String> actual = new HashMap<String, String>();
			actual.put("id", cursor.getString(0));
			actual.put("nombre", cursor.getString(1));
			actual.put("direccion", cursor.getString(2));
			listaRBC.add(actual);

			cursor.moveToNext();

		}
	cursor.close();
	cerrar();
	return listaRBC;

	}
					
	////Metodo para listar Terminal
		public ArrayList<HashMap<String, String>> listarTerminales() {

			abrir();
			Cursor cursor = db.rawQuery("SELECT ID_LUGAR,NOMBRELUGAR,DIRECCION FROM LUGAR WHERE ID_TIPO_LUGAR = 8", null);

			ArrayList<HashMap<String, String>> listaTerminal = new ArrayList<HashMap<String, String>>();

			cursor.moveToFirst();
			while (!cursor.isAfterLast()) {
				HashMap<String, String> actual = new HashMap<String, String>();
				actual.put("id", cursor.getString(0));
				actual.put("nombre", cursor.getString(1));
				actual.put("direccion", cursor.getString(2));
				listaTerminal.add(actual);

				cursor.moveToNext();

			}
		cursor.close();
		cerrar();
		return listaTerminal;

	}
					
	////Metodo para listar Tienda
	public ArrayList<HashMap<String, String>> listarTiendas() {

		abrir();
		Cursor cursor = db.rawQuery("SELECT ID_LUGAR,NOMBRELUGAR,DIRECCION FROM LUGAR WHERE ID_TIPO_LUGAR = 9", null);

		ArrayList<HashMap<String, String>> listaTienda = new ArrayList<HashMap<String, String>>();

		cursor.moveToFirst();
		while (!cursor.isAfterLast()) {
			HashMap<String, String> actual = new HashMap<String, String>();
			actual.put("id", cursor.getString(0));
			actual.put("nombre", cursor.getString(1));
			actual.put("direccion", cursor.getString(2));
			listaTienda.add(actual);

			cursor.moveToNext();

		}
	cursor.close();
	cerrar();
	return listaTienda;

	}
					
	//Metodo para listar gasolinera
	public ArrayList<HashMap<String, String>> listarGasolineras() {

		abrir();
		Cursor cursor = db.rawQuery("SELECT ID_LUGAR,NOMBRELUGAR,DIRECCION FROM LUGAR WHERE ID_TIPO_LUGAR = 10", null);

		ArrayList<HashMap<String, String>> listaGasolinera = new ArrayList<HashMap<String, String>>();

		cursor.moveToFirst();
		while (!cursor.isAfterLast()) {
			HashMap<String, String> actual = new HashMap<String, String>();
			actual.put("id", cursor.getString(0));
			actual.put("nombre", cursor.getString(1));
			actual.put("direccion", cursor.getString(2));
			listaGasolinera.add(actual);

			cursor.moveToNext();
			}
		cursor.close();
		cerrar();
		return listaGasolinera;

		}
	
	public ArrayList<HashMap<String, String>> ubicacionLugar(int tipo) {
		abrir();
		Cursor cursor = db.rawQuery("SELECT ID_LUGAR,LATITUD,LONGITUD,NombreLugar FROM LUGAR WHERE ID_TIPO_LUGAR ="+ tipo, null);

		ArrayList<HashMap<String, String>> listaLugares = new ArrayList<HashMap<String, String>>();

		cursor.moveToFirst();
		while (!cursor.isAfterLast()) {
			HashMap<String, String> actual = new HashMap<String, String>();
			actual.put("id", cursor.getString(0));
			actual.put("lat", cursor.getString(1));
			actual.put("lng", cursor.getString(2));
			actual.put("titulo", cursor.getString(3));
			listaLugares.add(actual);

			cursor.moveToNext();

		}
		cursor.close();
		cerrar();
		return listaLugares;
		
	}
	
	public ArrayList<HashMap<String, String>> ubicarLugar(String lugar) {
		abrir();
		Cursor cursor = db.rawQuery("SELECT ID_LUGAR,LATITUD,LONGITUD,NOMBRELUGAR FROM LUGAR WHERE NOMBRELUGAR LIKE '%"+lugar+"%'", null);

		ArrayList<HashMap<String, String>> listaLugares = new ArrayList<HashMap<String, String>>();

		cursor.moveToFirst();
		while (!cursor.isAfterLast()) {
			HashMap<String, String> actual = new HashMap<String, String>();
			actual.put("id", cursor.getString(0));
			actual.put("lat", cursor.getString(1));
			actual.put("lng", cursor.getString(2));
			actual.put("titulo", cursor.getString(3));
			listaLugares.add(actual);

			cursor.moveToNext();

		}
		cursor.close();
		cerrar();
		return listaLugares;
		
	}
	
	public ArrayList<HashMap<String, String>> ubicarLugarTipo(String lugar,int tipo) {
		abrir();
		Cursor cursor = db.rawQuery("SELECT ID_LUGAR,LATITUD,LONGITUD,NOMBRELUGAR FROM LUGAR WHERE NOMBRELUGAR LIKE '%"+lugar+"%' AND ID_TIPO_LUGAR ="+ tipo, null);

		ArrayList<HashMap<String, String>> listaLugares = new ArrayList<HashMap<String, String>>();

		cursor.moveToFirst();
		while (!cursor.isAfterLast()) {
			HashMap<String, String> actual = new HashMap<String, String>();
			actual.put("id", cursor.getString(0));
			actual.put("lat", cursor.getString(1));
			actual.put("lng", cursor.getString(2));
			actual.put("titulo", cursor.getString(3));
			listaLugares.add(actual);

			cursor.moveToNext();

		}
		cursor.close();
		cerrar();
		return listaLugares;
		
	}
	
	public Lugar consultarLugar(String idlugar) {
		String[] id = { idlugar };
		Cursor cursor = db.query("lugar", camposLugar, "Id_Lugar = ?", id,
				null, null, null);
		if (cursor.moveToFirst()) {
			Lugar lugar = new Lugar();
			lugar.setIdlugar(Integer.parseInt(cursor.getString(0)));
			lugar.setNombrelugar(cursor.getString(1));
			lugar.setLatitud(Float.valueOf(cursor.getString(2)));
			lugar.setLongitud(Float.valueOf(cursor.getString(3)));
			lugar.setDescripcion(cursor.getString(4));
			lugar.setIdtipolugar(Integer.parseInt(cursor.getString(5)));
			lugar.setDireccion(cursor.getString(6));
			cursor.close();
			return lugar;
		} else {
			return null;
		}
	}
	
	public Puntuacion puntuacionLugar(String idlugar) {
		Cursor cursor = db.rawQuery("SELECT ROUND(AVG(puntos),1) FROM PUNTUACION WHERE ID_LUGAR ="+idlugar, null);

		if (cursor.moveToFirst()) {
			Puntuacion puntos = new Puntuacion();
			puntos.setPuntos(Float.valueOf(cursor.getString(0)));
			cursor.close();
			return puntos;
		}
		else{
			return null;
		}
	}
	
	public String insertar(Puntuacion puntos) {
		String regInsertados = "Puntuacion hecha";
		long contador = 0;
		ContentValues puntoValues = new ContentValues();
		puntoValues.put("id_lugar", puntos.getIdlugar());
		puntoValues.put("puntos", puntos.getPuntos());
		contador = db.insert("Puntuacion", null, puntoValues);
		if (contador == -1 || contador == 0) {
			regInsertados = "Error";
		} else {
			regInsertados = regInsertados + contador;
		}
		return regInsertados;
	}
	
	public String insertar(Comentario comment) {
		String regInsertados = "Puntuacion hecha";
		long contador = 0;
		ContentValues comentValues = new ContentValues();
		comentValues.put("id_lugar", comment.getIdlugar());
		comentValues.put("Critica", comment.getComentario());
		contador = db.insert("Comentario", null, comentValues);
		if (contador == -1 || contador == 0) {
			regInsertados = "Error";
		} else {
			regInsertados = regInsertados + contador;
		}
		return regInsertados;
	}
	
	////Metodo para listar Comentario no sincronizado WS JAVA
	public ArrayList<HashMap<String, String>> listarNoSyncComentario() {

		abrir();
		Cursor cursor = db.rawQuery("SELECT Id_Comentario,Id_Lugar,Critica FROM  Comentario WHERE sync = 0", null);

		ArrayList<HashMap<String, String>> listaComentarios= new ArrayList<HashMap<String, String>>();

		cursor.moveToFirst();
		while (!cursor.isAfterLast()) {
			HashMap<String, String> actual = new HashMap<String, String>();
			actual.put("Id_Comentario", cursor.getString(0));
			actual.put("Id_Lugar", cursor.getString(1));
			actual.put("Critica", cursor.getString(2));
			listaComentarios.add(actual);

			cursor.moveToNext();

		}
	cursor.close();
	cerrar();
	return listaComentarios;

	}
	
	////Metodo para listar Comentario no sincronizado WS PHP
	public ArrayList<HashMap<String, String>> listarNoSyncComentarioPhp() {

		abrir();
		Cursor cursor = db.rawQuery("SELECT Id_Comentario,Id_Lugar,Critica FROM  Comentario WHERE syncphp = 0", null);

		ArrayList<HashMap<String, String>> listaComentarios= new ArrayList<HashMap<String, String>>();

		cursor.moveToFirst();
		while (!cursor.isAfterLast()) {
			HashMap<String, String> actual = new HashMap<String, String>();
			actual.put("Id_Comentario", cursor.getString(0));
			actual.put("Id_Lugar", cursor.getString(1));
			actual.put("Critica", cursor.getString(2));
			listaComentarios.add(actual);

			cursor.moveToNext();

		}
	cursor.close();
	cerrar();
	return listaComentarios;

	}
	
	public String actualizarComentario(String idcoment,String ws) {
		abrir();

		long contador = 0;
		String[] id = { idcoment };
		ContentValues cv = new ContentValues();
		cv.put(ws, 1);
		contador = db.update("comentario", cv, "Id_Comentario = ?", id);
		cerrar();

		if (contador == -1 || contador == 0) {
			return "Registro Actualizado Correctamente";
		}
		else {
			return "Registro no existe";
		}
	}		
	
	public String actualizarPuntuacion(String idpunt,String ws) {
	
		abrir();
		long contador = 0;
		String[] id = { idpunt };
		ContentValues cv = new ContentValues();
		cv.put(ws, 1);
		contador = db.update("Puntuacion", cv, "Id_Puntuacion = ?", id);
		cerrar();
		if (contador == -1 || contador == 0) {
			return "Registro Actualizado Correctamente";
		}
		else {
			return "Registro no existe";
		}
		
	}
	////Metodo para listar Puntuaciones no sincronizadas WS JAVA
	public ArrayList<HashMap<String, String>> listarNoSyncPuntuacion() {

		abrir();
		Cursor cursor = db.rawQuery("SELECT Id_Puntuacion,Id_Lugar,Puntos FROM  puntuacion WHERE sync = 0", null);

		ArrayList<HashMap<String, String>> listaPuntuacion= new ArrayList<HashMap<String, String>>();

		cursor.moveToFirst();
		while (!cursor.isAfterLast()) {
			HashMap<String, String> actual = new HashMap<String, String>();
			actual.put("Id_Puntuacion", cursor.getString(0));
			actual.put("Id_Lugar", cursor.getString(1));
			actual.put("Puntos", cursor.getString(2));
			listaPuntuacion.add(actual);

			cursor.moveToNext();

		}
	cursor.close();
	cerrar();
	return listaPuntuacion;

	}
	
	////Metodo para listar Puntuaciones no sincronizada WS PHP
	public ArrayList<HashMap<String, String>> listarNoSyncPuntuacionPhp() {

		abrir();
		Cursor cursor = db.rawQuery("SELECT Id_Puntuacion,Id_Lugar,Puntos FROM  puntuacion WHERE syncphp = 0", null);

		ArrayList<HashMap<String, String>> listaPuntuacion= new ArrayList<HashMap<String, String>>();

		cursor.moveToFirst();
		while (!cursor.isAfterLast()) {
			HashMap<String, String> actual = new HashMap<String, String>();
			actual.put("Id_Puntuacion", cursor.getString(0));
			actual.put("Id_Lugar", cursor.getString(1));
			actual.put("Puntos", cursor.getString(2));
			listaPuntuacion.add(actual);

			cursor.moveToNext();

		}
	cursor.close();
	cerrar();
	return listaPuntuacion;

	}

					
}



